
#include "stdafx.h"
#include "WicFormatConverter.h"
#include "WicFormatConverterInfo.h"

//==============================================================================
// CWicFormatConverter
//==============================================================================
CWicFormatConverter::CWicFormatConverter() : CWicBitmapSource()
{
    m_pIWICFormatConverter = NULL;
    g_hrLast = g_theImagingFactory->CreateFormatConverter(&m_pIWICFormatConverter);
}

CWicFormatConverter::~CWicFormatConverter()
{
    if(m_pIWICFormatConverter)
    {
        m_pIWICFormatConverter->Release();
    }
    m_pIWICFormatConverter = NULL;
}

CWicFormatConverter::CWicFormatConverter(CWicFormatConverter const & obj) : CWicBitmapSource()
{
    m_pIWICFormatConverter = obj.m_pIWICFormatConverter;
    m_pIWICFormatConverter->AddRef();
}

CWicFormatConverter::CWicFormatConverter(CWicFormatConverterInfo const & obj)
{
    obj.m_pIWICFormatConverterInfo->CreateInstance(&m_pIWICFormatConverter);
}

CWicFormatConverter& CWicFormatConverter::operator=(CWicFormatConverter const & objFormatConverter)
{
    if(m_pIWICFormatConverter)
    {
        m_pIWICFormatConverter->Release();
    }
    ClearPtr();
    m_pIWICFormatConverter = objFormatConverter.m_pIWICFormatConverter;
    m_pIWICFormatConverter->AddRef();
    return *this;
}

//==============================================================================
// IWICFormatConverter
//==============================================================================
HRESULT CWicFormatConverter::Initialize(
                           /* [in] */ CWicBitmapSource *pSource,
                           /* [in] */ REFWICPixelFormatGUID dstFormat,
                           /* [in] */ WICBitmapDitherType dither,
                           /* [unique][in] */ CWicPalette *pIPalette,
                           /* [in] */ double alphaThresholdPercent,
                           /* [in] */ WICBitmapPaletteType paletteTranslate)
{
    if(pIPalette)
    {
        g_hrLast = m_pIWICFormatConverter->Initialize(
            pSource->GetPtr(), dstFormat, dither, pIPalette->GetPtr(), 
            alphaThresholdPercent, paletteTranslate);
    }
    else
    {
        g_hrLast = m_pIWICFormatConverter->Initialize(
            pSource->GetPtr(), dstFormat, dither, NULL, 
            alphaThresholdPercent, paletteTranslate);
    }
    return g_hrLast;
}

HRESULT CWicFormatConverter::CanConvert(
                           /* [in] */ REFWICPixelFormatGUID srcPixelFormat,
                           /* [in] */ REFWICPixelFormatGUID dstPixelFormat,
                           /* [out] */ __RPC__out BOOL *pfCanConvert)
{
    g_hrLast = m_pIWICFormatConverter->CanConvert(srcPixelFormat, dstPixelFormat, pfCanConvert);
    return g_hrLast;
}


